'use strict'
const path = require('path')

function resolve(dir){
  return path.join(__dirname, dir)
}

/**
 * vue.config.js 配置文件 有@vue/cli-server 加载
 * 以及各种loader 有服务加载
 */
// 去除console
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');  // 2.2.0 版本有坑  1.1.1版本ok的
const TerserPlugin = require('terser-webpack-plugin');  //  webpack-parallel-uglify-plugin
// const VueLoaderPlugin = require("vue-loader");
// 压缩css、js
// const CompressionWebpackPlugin = require('compression-webpack-plugin');
// 要压缩的文件
// const productionGzipExtensions = ['js', 'css'];
module.exports = {
  //
  // publicPath: '/os/',
  publicPath: '/',
  outputDir: 'dist',
  // 与springboot整合不能使用static作为静态资源目录
  assetsDir: 'assets',
  productionSourceMap: false,
  pwa: {
    iconPaths: {
      favicon32: 'favicon.ico',
      favicon16: 'favicon.ico',
      appleTouchIcon: 'favicon.ico',
      maskIcon: 'favicon.ico',
      msTileImage: 'favicon.ico',
    },
  },
  css: {
    loaderOptions: {
      sass: {
        data: `@import "@/style/theme.scss";`
      }
    }
  },
  // webpack-dev-server相关配置
  devServer: {
    disableHostCheck: true,  // 关闭检查
    host: '0.0.0.0',   // 通过ip/ifconfig查看本机IP
    // port: 8036,
    proxy: {
      // [process.env.VUE_APP_BASE_API]
      '/webapi': {
        // target: 'http://192.168.1.1/cgi-bin',
        target: 'http://192.168.10.135/cgi-bin',
        changeOrigin: true,
        ws: true,
        secure: false,  // https协议
        pathRewrite: {
          '^/webapi': '/webapi',
        }
      },
      '/conf': {
        target: 'http://192.168.10.156/cgi-bin',
        changeOrigin: true,
        ws: true,
        secure: false,
        pathRewrite: {
          '^/conf': '../conf',
        }
      }
    }
  },
  configureWebpack: config => {
    return {
      resolve: {
        alias: {
          '@': resolve('src')
        }
      },
      performance: {
        // hints: false,
        hints: 'warning',
        // 入口点文件最大容量体积大小长度Byte
        maxEntrypointSize: 6000000,
        // 生成文件最大体积 字节
        maxAssetSize: 5000000,
        // 资源文件名过滤
        assetFilter(assetFilename) {
          return assetFilename.endsWith('.js') || assetFilename.endsWith('.css')
          || assetFilename.endsWith('.png')
        },
      },
      plugins: [
        // ...config.plugins,
        // new VueLoaderPlugin(),
        // new CompressionWebpackPlugin({
        //   // filename: '[dir][name].gz[ext][query]',
        //   test: /\.js$|\.html$|\.css/, // 匹配文件名
        //   // test: new RegExp('\\.(js|css)$'), //压缩 js 与 css
        //   algorithm: 'gzip', //算法
        //   threshold: 10240,//只处理比这个值大的资源。按字节计算
        //   deleteOriginalAssets: true, // 是否删除源文件
        //   minRatio: 0.8, //只有压缩率比这个值小的资源才会被处理
        //   filename: '[path].gz[query]', //目标资源名称。[file] 会被替换成原资源。[path] 会被替换成原资源路径，[query] 替换成原查询字符串
        // }),
        new TerserPlugin({
          terserOptions: {
            ecma: undefined,
            warnings: false,
            parse: {},
            compress: {
              drop_console: true,
              drop_debugger: true,
              pure_funcs: ['console.log'] // 移除console
            }
          },
        }),
      ],
      // 优化  majorization
      optimization: {
        minimizer: [
          new UglifyJsPlugin({
            uglifyOptions: {
              // 删除注释
              output:{
                comments:false
              },
              // 删除console debugger 删除警告
              compress: {
                warnings: false,
                drop_console: true,//console
                drop_debugger: false,
                pure_funcs: ['console.log']//移除console
              }
            }
          })
        ]
      }
    }
  },
  chainWebpack(config){
    // config.when(process.env.NODE_ENV==="development", config => {
    //   config
    //     .plugin('compressionPlugin')
    //     .use(require("compression-webpack-plugin"))
    //     .tap(() => [
    //       {
    //         test: /\.js$|\.html$|\.css/, // 匹配文件名
    //         // test: new RegExp('\\.(js|css)$'), //压缩 js 与 css
    //         algorithm: 'gzip', //算法
    //         threshold: 10240,//只处理比这个值大的资源。按字节计算
    //         deleteOriginalAssets: true, // 是否删除源文件
    //         minRatio: 0.8, //只有压缩率比这个值小的资源才会被处理
    //         filename: '[path].gz[query]', //目标资源名称。[file] 会被替换成原资源。[path] 会被替换成原资源路径，[query] 替换成原查询字符串
    //       }
    //     ])
    // })
  }
}
